/* tentative improvement of the zhou process

here each band of the zhou process (F[27]) is included in a 128 bit field
one 128 bit field per digit.
 the bit 27-29 (set to 1 for unsolved row) are not used
 instead, a 128 bit field of unknown row is used
   9 bits per digit
   3 digits per group
   3 group
 so a pattern very similar to the digit map.

*/
const extern int TblRowUnsolved[8] = {// rows where no single is found  000 to 111
	00, 0777, 0777000, 0777777, 0777000000, 0777000777, 0777777000, 0777777777 };

const int TblRowMask[8] = {// rows where single  found  000 to 111
	0777777777, 0777777000, 0777000777, 0777000000, 0777777, 0777000, 0777, 00, };
const int Tblstartblock[27] = { 0, 27, 54, 0, 27, 54, 0, 27, 54, 0, 27, 54, 0, 27, 54, 0, 27, 54, 0, 27, 54, 0, 27, 54, 0, 27, 54, };

const int TblShrinkMask[512] = {
	0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3,
	2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3,
	4, 5, 5, 5, 5, 5, 5, 5, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7,
	6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7,
	4, 5, 5, 5, 5, 5, 5, 5, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7,
	6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7,
	4, 5, 5, 5, 5, 5, 5, 5, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7,
	6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7,
	4, 5, 5, 5, 5, 5, 5, 5, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7,
	6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7,
	4, 5, 5, 5, 5, 5, 5, 5, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7,
	6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7,
	4, 5, 5, 5, 5, 5, 5, 5, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7,
	6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7,
	4, 5, 5, 5, 5, 5, 5, 5, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7,
	6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7,
};


const int TblComplexMask[512] = {// keep mini rows still valid 
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 07007070700, 07707070700, 07007770700, 07707770700,
	0, 0, 0, 0, 07077070700, 07777070700, 07777770700, 07777770700,
	0, 0, 07007700070, 07077700070, 0, 0, 07007770070, 07077770070,
	0, 0, 07707700070, 07777700070, 0, 0, 07777770070, 07777770070,
	0, 0, 07007700770, 07777700770, 07007070770, 07777070770, 07007770770, 07777770770,
	0, 0, 07707700770, 07777700770, 07077070770, 07777070770, 07777770770, 07777770770,
	0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 07070007700, 07070707700, 07770007700, 07770707700,
	0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 07077007700, 07777707700, 07777007700, 07777707700,
	0, 07070700007, 0, 07077700007, 0, 07070707007, 0, 07077707007,
	0, 07070700707, 0, 07777700707, 07070007707, 07070707707, 07777007707, 07777707707,
	0, 07770700007, 0, 07777700007, 0, 07777707007, 0, 07777707007,
	0, 07770700707, 0, 07777700707, 07077007707, 07777707707, 07777007707, 07777707707,
	0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 07070077700, 07070777700, 07770777700, 07770777700,
	0, 0, 0, 0, 07007077700, 07707777700, 07007777700, 07707777700,
	0, 0, 0, 0, 07077077700, 07777777700, 07777777700, 07777777700,
	0, 07070700077, 07007700077, 07077700077, 0, 07070777077, 07007777077, 07077777077,
	0, 07070700777, 07707700777, 07777700777, 07070077777, 07070777777, 07777777777, 07777777777,
	0, 07770700777, 07007700777, 07777700777, 07007077777, 07777777777, 07007777777, 07777777777,
	0, 07770700777, 07707700777, 07777700777, 07077077777, 07777777777, 07777777777, 07777777777,
	0, 0, 0, 0, 0, 0, 0, 0,
	00, 0, 07700007070, 07700077070, 0, 0, 07770007070, 07770077070,
	00, 07700070007, 0, 07700077007, 0, 07707070007, 0, 07707077007,
	00, 07700070077, 07700007077, 07700077077, 0, 07777070077, 07777007077, 07777077077,
	00, 0, 0, 0, 0, 0, 0, 0,
	00, 0, 07707007070, 07777077070, 0, 0, 07777007070, 07777077070,
	00, 07770070007, 0, 07777077007, 0, 07777070007, 0, 07777077007,
	00, 07770070077, 07707007077, 07777077077, 0, 07777070077, 07777007077, 07777077077,
	00, 0, 0, 0, 0, 0, 0, 0,
	00, 0, 07700707070, 07700777070, 0, 0, 07770777070, 07770777070,
	00, 07700070707, 0, 07700777707, 07007070707, 07707070707, 07007777707, 07707777707,
	00, 07700070777, 07700707777, 07700777777, 07077070777, 07777070777, 07777777777, 07777777777,
	00, 0, 07007707070, 07077777070, 0, 0, 07007777070, 07077777070,
	00, 0, 07707707070, 07777777070, 0, 0, 07777777070, 07777777070,
	00, 07770070777, 07007707777, 07777777777, 07007070777, 07777070777, 07007777777, 07777777777,
	00, 07770070777, 07707707777, 07777777777, 07077070777, 07777070777, 07777777777, 07777777777,
	00, 0, 0, 0, 0, 0, 0, 0,
	00, 0, 07700007770, 07700777770, 07070007770, 07070777770, 07770007770, 07770777770,
	00, 07700770007, 0, 07700777007, 0, 07707777007, 0, 07707777007,
	00, 07700770777, 07700007777, 07700777777, 07077007777, 07777777777, 07777007777, 07777777777,
	00, 07070770007, 0, 07077777007, 0, 07070777007, 0, 07077777007,
	00, 07070770777, 07707007777, 07777777777, 07070007777, 07070777777, 07777007777, 07777777777,
	00, 07770770007, 0, 07777777007, 0, 07777777007, 0, 07777777007,
	00, 07770770777, 07707007777, 07777777777, 07077007777, 07777777777, 07777007777, 07777777777,
	00, 0, 0, 0, 0, 0, 0, 0,
	00, 0, 07700707770, 07700777770, 07070077770, 07070777770, 07770777770, 07770777770,
	00, 07700770707, 0, 07700777707, 07007077707, 07707777707, 07007777707, 07707777707,
	00, 07700770777, 07700707777, 07700777777, 07077077777, 07777777777, 07777777777, 07777777777,
	00, 07070770077, 07007707077, 07077777077, 0, 07070777077, 07007777077, 07077777077,
	00, 07070770777, 07707707777, 07777777777, 07070077777, 07070777777, 07777777777, 07777777777,
	00, 07770770777, 07007707777, 07777777777, 07007077777, 07777777777, 07007777777, 07777777777,
	00, 07770770777, 07707707777, 07777777777, 07077077777, 07777777777, 07777777777, 07777777777,

};


const int TblMaskSingle[512] = {// kill in other blocks locked column /box
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07767767767, 07766766766, 07765765765, 07767767767, 07763763763, 07767767767, 07767767767, 07767767767,
	07757757757, 07756756756, 07755755755, 07757757757, 07753753753, 07757757757, 07757757757, 07757757757,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07737737737, 07736736736, 07735735735, 07737737737, 07733733733, 07737737737, 07737737737, 07737737737,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07677677677, 07676676676, 07675675675, 07677677677, 07673673673, 07677677677, 07677677677, 07677677677,
	07667667667, 07666666666, 07665665665, 07667667667, 07663663663, 07667667667, 07667667667, 07667667667,
	07657657657, 07656656656, 07655655655, 07657657657, 07653653653, 07657657657, 07657657657, 07657657657,
	07677677677, 07676676676, 07675675675, 07677677677, 07673673673, 07677677677, 07677677677, 07677677677,
	07637637637, 07636636636, 07635635635, 07637637637, 07633633633, 07637637637, 07637637637, 07637637637,
	07677677677, 07676676676, 07675675675, 07677677677, 07673673673, 07677677677, 07677677677, 07677677677,
	07677677677, 07676676676, 07675675675, 07677677677, 07673673673, 07677677677, 07677677677, 07677677677,
	07677677677, 07676676676, 07675675675, 07677677677, 07673673673, 07677677677, 07677677677, 07677677677,
	07577577577, 07576576576, 07575575575, 07577577577, 07573573573, 07577577577, 07577577577, 07577577577,
	07567567567, 07566566566, 07565565565, 07567567567, 07563563563, 07567567567, 07567567567, 07567567567,
	07557557557, 07556556556, 07555555555, 07557557557, 07553553553, 07557557557, 07557557557, 07557557557,
	07577577577, 07576576576, 07575575575, 07577577577, 07573573573, 07577577577, 07577577577, 07577577577,
	07537537537, 07536536536, 07535535535, 07537537537, 07533533533, 07537537537, 07537537537, 07537537537,
	07577577577, 07576576576, 07575575575, 07577577577, 07573573573, 07577577577, 07577577577, 07577577577,
	07577577577, 07576576576, 07575575575, 07577577577, 07573573573, 07577577577, 07577577577, 07577577577,
	07577577577, 07576576576, 07575575575, 07577577577, 07573573573, 07577577577, 07577577577, 07577577577,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07767767767, 07766766766, 07765765765, 07767767767, 07763763763, 07767767767, 07767767767, 07767767767,
	07757757757, 07756756756, 07755755755, 07757757757, 07753753753, 07757757757, 07757757757, 07757757757,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07737737737, 07736736736, 07735735735, 07737737737, 07733733733, 07737737737, 07737737737, 07737737737,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07377377377, 07376376376, 07375375375, 07377377377, 07373373373, 07377377377, 07377377377, 07377377377,
	07367367367, 07366366366, 07365365365, 07367367367, 07363363363, 07367367367, 07367367367, 07367367367,
	07357357357, 07356356356, 07355355355, 07357357357, 07353353353, 07357357357, 07357357357, 07357357357,
	07377377377, 07376376376, 07375375375, 07377377377, 07373373373, 07377377377, 07377377377, 07377377377,
	07337337337, 07336336336, 07335335335, 07337337337, 07333333333, 07337337337, 07337337337, 07337337337,
	07377377377, 07376376376, 07375375375, 07377377377, 07373373373, 07377377377, 07377377377, 07377377377,
	07377377377, 07376376376, 07375375375, 07377377377, 07373373373, 07377377377, 07377377377, 07377377377,
	07377377377, 07376376376, 07375375375, 07377377377, 07373373373, 07377377377, 07377377377, 07377377377,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07767767767, 07766766766, 07765765765, 07767767767, 07763763763, 07767767767, 07767767767, 07767767767,
	07757757757, 07756756756, 07755755755, 07757757757, 07753753753, 07757757757, 07757757757, 07757757757,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07737737737, 07736736736, 07735735735, 07737737737, 07733733733, 07737737737, 07737737737, 07737737737,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07767767767, 07766766766, 07765765765, 07767767767, 07763763763, 07767767767, 07767767767, 07767767767,
	07757757757, 07756756756, 07755755755, 07757757757, 07753753753, 07757757757, 07757757757, 07757757757,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07737737737, 07736736736, 07735735735, 07737737737, 07733733733, 07737737737, 07737737737, 07737737737,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07767767767, 07766766766, 07765765765, 07767767767, 07763763763, 07767767767, 07767767767, 07767767767,
	07757757757, 07756756756, 07755755755, 07757757757, 07753753753, 07757757757, 07757757757, 07757757757,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07737737737, 07736736736, 07735735735, 07737737737, 07733733733, 07737737737, 07737737737, 07737737737,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,
	07777777777, 07776776776, 07775775775, 07777777777, 07773773773, 07777777777, 07777777777, 07777777777,

};


const int TblMaskDouble[512] = {// kill for locked in box / column
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07747747747, 07747747747, 07747747747, 07744744744, 07747747747, 07742742742, 07741741741, 07747747747,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07727727727, 07727727727, 07727727727, 07724724724, 07727727727, 07722722722, 07721721721, 07727727727,
	07717717717, 07717717717, 07717717717, 07714714714, 07717717717, 07712712712, 07711711711, 07717717717,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07747747747, 07747747747, 07747747747, 07744744744, 07747747747, 07742742742, 07741741741, 07747747747,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07727727727, 07727727727, 07727727727, 07724724724, 07727727727, 07722722722, 07721721721, 07727727727,
	07717717717, 07717717717, 07717717717, 07714714714, 07717717717, 07712712712, 07711711711, 07717717717,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07747747747, 07747747747, 07747747747, 07744744744, 07747747747, 07742742742, 07741741741, 07747747747,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07727727727, 07727727727, 07727727727, 07724724724, 07727727727, 07722722722, 07721721721, 07727727727,
	07717717717, 07717717717, 07717717717, 07714714714, 07717717717, 07712712712, 07711711711, 07717717717,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07477477477, 07477477477, 07477477477, 07474474474, 07477477477, 07472472472, 07471471471, 07477477477,
	07477477477, 07477477477, 07477477477, 07474474474, 07477477477, 07472472472, 07471471471, 07477477477,
	07477477477, 07477477477, 07477477477, 07474474474, 07477477477, 07472472472, 07471471471, 07477477477,
	07447447447, 07447447447, 07447447447, 07444444444, 07447447447, 07442442442, 07441441441, 07447447447,
	07477477477, 07477477477, 07477477477, 07474474474, 07477477477, 07472472472, 07471471471, 07477477477,
	07427427427, 07427427427, 07427427427, 07424424424, 07427427427, 07422422422, 07421421421, 07427427427,
	07417417417, 07417417417, 07417417417, 07414414414, 07417417417, 07412412412, 07411411411, 07417417417,
	07477477477, 07477477477, 07477477477, 07474474474, 07477477477, 07472472472, 07471471471, 07477477477,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07747747747, 07747747747, 07747747747, 07744744744, 07747747747, 07742742742, 07741741741, 07747747747,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07727727727, 07727727727, 07727727727, 07724724724, 07727727727, 07722722722, 07721721721, 07727727727,
	07717717717, 07717717717, 07717717717, 07714714714, 07717717717, 07712712712, 07711711711, 07717717717,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07277277277, 07277277277, 07277277277, 07274274274, 07277277277, 07272272272, 07271271271, 07277277277,
	07277277277, 07277277277, 07277277277, 07274274274, 07277277277, 07272272272, 07271271271, 07277277277,
	07277277277, 07277277277, 07277277277, 07274274274, 07277277277, 07272272272, 07271271271, 07277277277,
	07247247247, 07247247247, 07247247247, 07244244244, 07247247247, 07242242242, 07241241241, 07247247247,
	07277277277, 07277277277, 07277277277, 07274274274, 07277277277, 07272272272, 07271271271, 07277277277,
	07227227227, 07227227227, 07227227227, 07224224224, 07227227227, 07222222222, 07221221221, 07227227227,
	07217217217, 07217217217, 07217217217, 07214214214, 07217217217, 07212212212, 07211211211, 07217217217,
	07277277277, 07277277277, 07277277277, 07274274274, 07277277277, 07272272272, 07271271271, 07277277277,
	07177177177, 07177177177, 07177177177, 07174174174, 07177177177, 07172172172, 07171171171, 07177177177,
	07177177177, 07177177177, 07177177177, 07174174174, 07177177177, 07172172172, 07171171171, 07177177177,
	07177177177, 07177177177, 07177177177, 07174174174, 07177177177, 07172172172, 07171171171, 07177177177,
	07147147147, 07147147147, 07147147147, 07144144144, 07147147147, 07142142142, 07141141141, 07147147147,
	07177177177, 07177177177, 07177177177, 07174174174, 07177177177, 07172172172, 07171171171, 07177177177,
	07127127127, 07127127127, 07127127127, 07124124124, 07127127127, 07122122122, 07121121121, 07127127127,
	07117117117, 07117117117, 07117117117, 07114114114, 07117117117, 07112112112, 07111111111, 07117117117,
	07177177177, 07177177177, 07177177177, 07174174174, 07177177177, 07172172172, 07171171171, 07177177177,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07747747747, 07747747747, 07747747747, 07744744744, 07747747747, 07742742742, 07741741741, 07747747747,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
	07727727727, 07727727727, 07727727727, 07724724724, 07727727727, 07722722722, 07721721721, 07727727727,
	07717717717, 07717717717, 07717717717, 07714714714, 07717717717, 07712712712, 07711711711, 07717717717,
	07777777777, 07777777777, 07777777777, 07774774774, 07777777777, 07772772772, 07771771771, 07777777777,
};


const int TblColumnSingle[512] = {// single in column applied to shrinked bloc
	00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
	00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
	00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
	00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
	00, 00, 00, 00, 00, 00, 00, 00, 00, 0777, 0777, 0666, 0777, 0666, 0666, 0666,
	00, 0777, 0777, 0666, 0777, 0666, 0666, 0666, 00, 0555, 0555, 0444, 0555, 0444, 0444, 0444,
	00, 0777, 0777, 0666, 0777, 0666, 0666, 0666, 00, 0555, 0555, 0444, 0555, 0444, 0444, 0444,
	00, 0555, 0555, 0444, 0555, 0444, 0444, 0444, 00, 0555, 0555, 0444, 0555, 0444, 0444, 0444,
	00, 00, 00, 00, 00, 00, 00, 00, 00, 0777, 0777, 0666, 0777, 0666, 0666, 0666,
	00, 0777, 0777, 0666, 0777, 0666, 0666, 0666, 00, 0555, 0555, 0444, 0555, 0444, 0444, 0444,
	00, 0777, 0777, 0666, 0777, 0666, 0666, 0666, 00, 0555, 0555, 0444, 0555, 0444, 0444, 0444,
	00, 0555, 0555, 0444, 0555, 0444, 0444, 0444, 00, 0555, 0555, 0444, 0555, 0444, 0444, 0444,
	00, 00, 00, 00, 00, 00, 00, 00, 00, 0333, 0333, 0222, 0333, 0222, 0222, 0222,
	00, 0333, 0333, 0222, 0333, 0222, 0222, 0222, 00, 0111, 0111, 00, 0111, 00, 00, 00,
	00, 0333, 0333, 0222, 0333, 0222, 0222, 0222, 00, 0111, 0111, 00, 0111, 00, 00, 00,
	00, 0111, 0111, 00, 0111, 00, 00, 00, 00, 0111, 0111, 00, 0111, 00, 00, 00,
	00, 00, 00, 00, 00, 00, 00, 00, 00, 0777, 0777, 0666, 0777, 0666, 0666, 0666,
	00, 0777, 0777, 0666, 0777, 0666, 0666, 0666, 00, 0555, 0555, 0444, 0555, 0444, 0444, 0444,
	00, 0777, 0777, 0666, 0777, 0666, 0666, 0666, 00, 0555, 0555, 0444, 0555, 0444, 0444, 0444,
	00, 0555, 0555, 0444, 0555, 0444, 0444, 0444, 00, 0555, 0555, 0444, 0555, 0444, 0444, 0444,
	00, 00, 00, 00, 00, 00, 00, 00, 00, 0333, 0333, 0222, 0333, 0222, 0222, 0222,
	00, 0333, 0333, 0222, 0333, 0222, 0222, 0222, 00, 0111, 0111, 00, 0111, 00, 00, 00,
	00, 0333, 0333, 0222, 0333, 0222, 0222, 0222, 00, 0111, 0111, 00, 0111, 00, 00, 00,
	00, 0111, 0111, 00, 0111, 00, 00, 00, 00, 0111, 0111, 00, 0111, 00, 00, 00,
	00, 00, 00, 00, 00, 00, 00, 00, 00, 0333, 0333, 0222, 0333, 0222, 0222, 0222,
	00, 0333, 0333, 0222, 0333, 0222, 0222, 0222, 00, 0111, 0111, 00, 0111, 00, 00, 00,
	00, 0333, 0333, 0222, 0333, 0222, 0222, 0222, 00, 0111, 0111, 00, 0111, 00, 00, 00,
	00, 0111, 0111, 00, 0111, 00, 00, 00, 00, 0111, 0111, 00, 0111, 00, 00, 00,
	00, 00, 00, 00, 00, 00, 00, 00, 00, 0333, 0333, 0222, 0333, 0222, 0222, 0222,
	00, 0333, 0333, 0222, 0333, 0222, 0222, 0222, 00, 0111, 0111, 00, 0111, 00, 00, 00,
	00, 0333, 0333, 0222, 0333, 0222, 0222, 0222, 00, 0111, 0111, 00, 0111, 00, 00, 00,
	00, 0111, 0111, 00, 0111, 00, 00, 00, 00, 0111, 0111, 00, 0111, 00, 00, 00,

};
const int TblShrinkSingle[512] = {// keep only rows with single
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0124, 0124, 0124, 0124, 0, 0, 0, 0, 0124, 0124, 0124, 0124,
	0, 0, 0142, 0142, 0, 0, 0142, 0142, 0, 0, 0142, 0142, 0, 0, 0142, 0142, 0, 0, 0142, 0142, 0124, 0124, 0100, 0100, 0, 0, 0142, 0142, 0124, 0124, 0100, 0100,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0214, 0214, 0214, 0214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0214, 0214, 0214, 0214,
	0, 0241, 0, 0241, 0, 0241, 0, 0241, 0, 0241, 0, 0241, 0214, 0200, 0214, 0200, 0, 0241, 0, 0241, 0, 0241, 0, 0241, 0, 0241, 0, 0241, 0214, 0200, 0214, 0200,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0214, 0214, 0214, 0214, 0, 0, 0, 0, 0124, 0124, 0124, 0124, 0, 0, 0, 0, 04, 04, 04, 04,
	0, 0241, 0142, 040, 0, 0241, 0142, 040, 0, 0241, 0142, 040, 0214, 0200, 0, 0, 0, 0241, 0142, 040, 0124, 0, 0100, 0, 0, 0241, 0142, 040, 04, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0412, 0412, 0, 0, 0412, 0412, 0, 0421, 0, 0421, 0, 0421, 0, 0421, 0, 0421, 0412, 0400, 0, 0421, 0412, 0400,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0412, 0412, 0, 0, 0412, 0412, 0, 0421, 0, 0421, 0, 0421, 0, 0421, 0, 0421, 0412, 0400, 0, 0421, 0412, 0400,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0412, 0412, 0, 0, 0412, 0412, 0, 0421, 0, 0421, 0124, 020, 0124, 020, 0, 0421, 0412, 0400, 0124, 020, 0, 0,
	0, 0, 0142, 0142, 0, 0, 0142, 0142, 0, 0, 02, 02, 0, 0, 02, 02, 0, 0421, 0142, 0, 0124, 020, 0100, 0, 0, 0421, 02, 0, 0124, 020, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0412, 0412, 0214, 0214, 010, 010, 0, 0421, 0, 0421, 0, 0421, 0, 0421, 0, 0421, 0412, 0400, 0214, 0, 010, 0,
	0, 0241, 0, 0241, 0, 0241, 0, 0241, 0, 0241, 0412, 0, 0214, 0200, 010, 0, 0, 01, 0, 01, 0, 01, 0, 01, 0, 01, 0412, 0, 0214, 0, 010, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0412, 0412, 0214, 0214, 010, 010, 0, 0421, 0, 0421, 0124, 020, 0124, 020, 0, 0421, 0412, 0400, 04, 0, 0, 0,
	0, 0241, 0142, 040, 0, 0241, 0142, 040, 0, 0241, 02, 0, 0214, 0200, 0, 0, 0, 01, 0142, 0, 0124, 0, 0100, 0, 0, 01, 02, 0, 04, 0, 0, 0,

};

const int TblRowUniq[512] = { // 1 is row not defined in block  mode  1 to 111
	7, 6, 6, 6, 6, 6, 6, 6, 5, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4,
	5, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4,
	3, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
	1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
	3, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
	1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
	3, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
	1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
	3, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
	1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
	3, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
	1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
	3, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
	1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
	3, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
	1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
};

const T128 AssignMask_Digit[81] = {// one mask for each assigned cell
	{ 0xfffbfdfe37e3f001, 0xfffffffefffbfdfe },	{ 0xfff7fbfd37e3f002, 0xfffffffefff7fbfd },
	{ 0xffeff7fb37e3f004, 0xfffffffeffeff7fb },	{ 0xffdfeff7371f8e08, 0xfffffffeffdfeff7 },
	{ 0xffbfdfef371f8e10, 0xfffffffeffbfdfef },	{ 0xff7fbfdf371f8e20, 0xfffffffeff7fbfdf },
	{ 0xfeff7fbf30fc7e40, 0xfffffffefeff7fbf },	{ 0xfdfeff7f30fc7e80, 0xfffffffefdfeff7f },
	{ 0xfbfdfeff30fc7f00, 0xfffffffefbfdfeff },	{ 0xfffbfdfe2fe003f8, 0xfffffffdfffbfdfe },
	{ 0xfff7fbfd2fe005f8, 0xfffffffdfff7fbfd },	{ 0xffeff7fb2fe009f8, 0xfffffffdffeff7fb },
	{ 0xffdfeff72f1c11c7, 0xfffffffdffdfeff7 },	{ 0xffbfdfef2f1c21c7, 0xfffffffdffbfdfef },
	{ 0xff7fbfdf2f1c41c7, 0xfffffffdff7fbfdf },	{ 0xfeff7fbf28fc803f, 0xfffffffdfeff7fbf },
	{ 0xfdfeff7f28fd003f, 0xfffffffdfdfeff7f },	{ 0xfbfdfeff28fe003f, 0xfffffffdfbfdfeff },
	{ 0xfffbfdfe1807f1f8, 0xfffffffbfffbfdfe },	{ 0xfff7fbfd180bf1f8, 0xfffffffbfff7fbfd },
	{ 0xffeff7fb1813f1f8, 0xfffffffbffeff7fb },	{ 0xffdfeff718238fc7, 0xfffffffbffdfeff7 },
	{ 0xffbfdfef18438fc7, 0xfffffffbffbfdfef },	{ 0xff7fbfdf18838fc7, 0xfffffffbff7fbfdf },
	{ 0xfeff7fbf19007e3f, 0xfffffffbfeff7fbf },	{ 0xfdfeff7f1a007e3f, 0xfffffffbfdfeff7f },
	{ 0xfbfdfeff1c007e3f, 0xfffffffbfbfdfeff },	{ 0x37e3f001fffbfdfe, 0xfffffff7fffbfdfe },
	{ 0x37e3f002fff7fbfd, 0xfffffff7fff7fbfd },	{ 0x37e3f004ffeff7fb, 0xfffffff7ffeff7fb },
	{ 0x371f8e08ffdfeff7, 0xfffffff7ffdfeff7 },	{ 0x371f8e10ffbfdfef, 0xfffffff7ffbfdfef },
	{ 0x371f8e20ff7fbfdf, 0xfffffff7ff7fbfdf },	{ 0x30fc7e40feff7fbf, 0xfffffff7feff7fbf },
	{ 0x30fc7e80fdfeff7f, 0xfffffff7fdfeff7f },	{ 0x30fc7f00fbfdfeff, 0xfffffff7fbfdfeff },
	{ 0x2fe003f8fffbfdfe, 0xffffffeffffbfdfe },	{ 0x2fe005f8fff7fbfd, 0xffffffeffff7fbfd },
	{ 0x2fe009f8ffeff7fb, 0xffffffefffeff7fb },	{ 0x2f1c11c7ffdfeff7, 0xffffffefffdfeff7 },
	{ 0x2f1c21c7ffbfdfef, 0xffffffefffbfdfef },	{ 0x2f1c41c7ff7fbfdf, 0xffffffefff7fbfdf },
	{ 0x28fc803ffeff7fbf, 0xffffffeffeff7fbf },	{ 0x28fd003ffdfeff7f, 0xffffffeffdfeff7f },
	{ 0x28fe003ffbfdfeff, 0xffffffeffbfdfeff },	{ 0x1807f1f8fffbfdfe, 0xffffffdffffbfdfe },
	{ 0x180bf1f8fff7fbfd, 0xffffffdffff7fbfd },	{ 0x1813f1f8ffeff7fb, 0xffffffdfffeff7fb },
	{ 0x18238fc7ffdfeff7, 0xffffffdfffdfeff7 },	{ 0x18438fc7ffbfdfef, 0xffffffdfffbfdfef },
	{ 0x18838fc7ff7fbfdf, 0xffffffdfff7fbfdf },	{ 0x19007e3ffeff7fbf, 0xffffffdffeff7fbf },
	{ 0x1a007e3ffdfeff7f, 0xffffffdffdfeff7f },	{ 0x1c007e3ffbfdfeff, 0xffffffdffbfdfeff },
	{ 0xfffbfdfefffbfdfe, 0xffffffbf37e3f001 },	{ 0xfff7fbfdfff7fbfd, 0xffffffbf37e3f002 },
	{ 0xffeff7fbffeff7fb, 0xffffffbf37e3f004 },	{ 0xffdfeff7ffdfeff7, 0xffffffbf371f8e08 },
	{ 0xffbfdfefffbfdfef, 0xffffffbf371f8e10 },	{ 0xff7fbfdfff7fbfdf, 0xffffffbf371f8e20 },
	{ 0xfeff7fbffeff7fbf, 0xffffffbf30fc7e40 },	{ 0xfdfeff7ffdfeff7f, 0xffffffbf30fc7e80 },
	{ 0xfbfdfefffbfdfeff, 0xffffffbf30fc7f00 },	{ 0xfffbfdfefffbfdfe, 0xffffff7f2fe003f8 },
	{ 0xfff7fbfdfff7fbfd, 0xffffff7f2fe005f8 },	{ 0xffeff7fbffeff7fb, 0xffffff7f2fe009f8 },
	{ 0xffdfeff7ffdfeff7, 0xffffff7f2f1c11c7 },	{ 0xffbfdfefffbfdfef, 0xffffff7f2f1c21c7 },
	{ 0xff7fbfdfff7fbfdf, 0xffffff7f2f1c41c7 },	{ 0xfeff7fbffeff7fbf, 0xffffff7f28fc803f },
	{ 0xfdfeff7ffdfeff7f, 0xffffff7f28fd003f },	{ 0xfbfdfefffbfdfeff, 0xffffff7f28fe003f },
	{ 0xfffbfdfefffbfdfe, 0xfffffeff1807f1f8 },	{ 0xfff7fbfdfff7fbfd, 0xfffffeff180bf1f8 },
	{ 0xffeff7fbffeff7fb, 0xfffffeff1813f1f8 },	{ 0xffdfeff7ffdfeff7, 0xfffffeff18238fc7 },
	{ 0xffbfdfefffbfdfef, 0xfffffeff18438fc7 },	{ 0xff7fbfdfff7fbfdf, 0xfffffeff18838fc7 },
	{ 0xfeff7fbffeff7fbf, 0xfffffeff19007e3f },	{ 0xfdfeff7ffdfeff7f, 0xfffffeff1a007e3f },
	{ 0xfbfdfefffbfdfeff, 0xfffffeff1c007e3f },
};

const T128 AssignMask_OtherDigits[81] = {//and all but that digit
	{ 0xfffffffffffffffe, 0xffffffffffffffff },	{ 0xfffffffffffffffd, 0xffffffffffffffff },
	{ 0xfffffffffffffffb, 0xffffffffffffffff },	{ 0xfffffffffffffff7, 0xffffffffffffffff },
	{ 0xffffffffffffffef, 0xffffffffffffffff },	{ 0xffffffffffffffdf, 0xffffffffffffffff },
	{ 0xffffffffffffffbf, 0xffffffffffffffff },	{ 0xffffffffffffff7f, 0xffffffffffffffff },
	{ 0xfffffffffffffeff, 0xffffffffffffffff },	{ 0xfffffffffffffdff, 0xffffffffffffffff },
	{ 0xfffffffffffffbff, 0xffffffffffffffff },	{ 0xfffffffffffff7ff, 0xffffffffffffffff },
	{ 0xffffffffffffefff, 0xffffffffffffffff },	{ 0xffffffffffffdfff, 0xffffffffffffffff },
	{ 0xffffffffffffbfff, 0xffffffffffffffff },	{ 0xffffffffffff7fff, 0xffffffffffffffff },
	{ 0xfffffffffffeffff, 0xffffffffffffffff },	{ 0xfffffffffffdffff, 0xffffffffffffffff },
	{ 0xfffffffffffbffff, 0xffffffffffffffff },	{ 0xfffffffffff7ffff, 0xffffffffffffffff },
	{ 0xffffffffffefffff, 0xffffffffffffffff },	{ 0xffffffffffdfffff, 0xffffffffffffffff },
	{ 0xffffffffffbfffff, 0xffffffffffffffff },	{ 0xffffffffff7fffff, 0xffffffffffffffff },
	{ 0xfffffffffeffffff, 0xffffffffffffffff },	{ 0xfffffffffdffffff, 0xffffffffffffffff },
	{ 0xfffffffffbffffff, 0xffffffffffffffff },	{ 0xfffffffeffffffff, 0xffffffffffffffff },
	{ 0xfffffffdffffffff, 0xffffffffffffffff },	{ 0xfffffffbffffffff, 0xffffffffffffffff },
	{ 0xfffffff7ffffffff, 0xffffffffffffffff },	{ 0xffffffefffffffff, 0xffffffffffffffff },
	{ 0xffffffdfffffffff, 0xffffffffffffffff },	{ 0xffffffbfffffffff, 0xffffffffffffffff },
	{ 0xffffff7fffffffff, 0xffffffffffffffff },	{ 0xfffffeffffffffff, 0xffffffffffffffff },
	{ 0xfffffdffffffffff, 0xffffffffffffffff },	{ 0xfffffbffffffffff, 0xffffffffffffffff },
	{ 0xfffff7ffffffffff, 0xffffffffffffffff },	{ 0xffffefffffffffff, 0xffffffffffffffff },
	{ 0xffffdfffffffffff, 0xffffffffffffffff },	{ 0xffffbfffffffffff, 0xffffffffffffffff },
	{ 0xffff7fffffffffff, 0xffffffffffffffff },	{ 0xfffeffffffffffff, 0xffffffffffffffff },
	{ 0xfffdffffffffffff, 0xffffffffffffffff },	{ 0xfffbffffffffffff, 0xffffffffffffffff },
	{ 0xfff7ffffffffffff, 0xffffffffffffffff },	{ 0xffefffffffffffff, 0xffffffffffffffff },
	{ 0xffdfffffffffffff, 0xffffffffffffffff },	{ 0xffbfffffffffffff, 0xffffffffffffffff },
	{ 0xff7fffffffffffff, 0xffffffffffffffff },	{ 0xfeffffffffffffff, 0xffffffffffffffff },
	{ 0xfdffffffffffffff, 0xffffffffffffffff },	{ 0xfbffffffffffffff, 0xffffffffffffffff },
	{ 0xffffffffffffffff, 0xfffffffffffffffe },	{ 0xffffffffffffffff, 0xfffffffffffffffd },
	{ 0xffffffffffffffff, 0xfffffffffffffffb },	{ 0xffffffffffffffff, 0xfffffffffffffff7 },
	{ 0xffffffffffffffff, 0xffffffffffffffef },	{ 0xffffffffffffffff, 0xffffffffffffffdf },
	{ 0xffffffffffffffff, 0xffffffffffffffbf },	{ 0xffffffffffffffff, 0xffffffffffffff7f },
	{ 0xffffffffffffffff, 0xfffffffffffffeff },	{ 0xffffffffffffffff, 0xfffffffffffffdff },
	{ 0xffffffffffffffff, 0xfffffffffffffbff },	{ 0xffffffffffffffff, 0xfffffffffffff7ff },
	{ 0xffffffffffffffff, 0xffffffffffffefff },	{ 0xffffffffffffffff, 0xffffffffffffdfff },
	{ 0xffffffffffffffff, 0xffffffffffffbfff },	{ 0xffffffffffffffff, 0xffffffffffff7fff },
	{ 0xffffffffffffffff, 0xfffffffffffeffff },	{ 0xffffffffffffffff, 0xfffffffffffdffff },
	{ 0xffffffffffffffff, 0xfffffffffffbffff },	{ 0xffffffffffffffff, 0xfffffffffff7ffff },
	{ 0xffffffffffffffff, 0xffffffffffefffff },	{ 0xffffffffffffffff, 0xffffffffffdfffff },
	{ 0xffffffffffffffff, 0xffffffffffbfffff },	{ 0xffffffffffffffff, 0xffffffffff7fffff },
	{ 0xffffffffffffffff, 0xfffffffffeffffff },	{ 0xffffffffffffffff, 0xfffffffffdffffff },
	{ 0xffffffffffffffff, 0xfffffffffbffffff },
};

const T128 TblColumnMask[9] = {
	{ 0x4020100040201, 0x40201 },	{ 0x8040200080402, 0x80402 },		{ 0x10080400100804, 0x100804 },	{ 0x20100800201008, 0x201008 },
	{ 0x40201000402010, 0x402010 },	{ 0x80402000804020, 0x804020 },	{ 0x100804001008040, 0x1008040 },	{ 0x201008002010080, 0x2010080 },
	{ 0x402010004020100, 0x4020100 },
};
#define ZHD_BLOC2  0x1ff07ffffff
const T128 zhoustart[19] = {
	{BIT_SET_2X,ZHD_BLOC2},{BIT_SET_2X,BIT_SET_27},
	{BIT_SET_2X,ZHD_BLOC2},{BIT_SET_2X,BIT_SET_27},
	{BIT_SET_2X,ZHD_BLOC2},{BIT_SET_2X,BIT_SET_27},
	{BIT_SET_2X,ZHD_BLOC2},{BIT_SET_2X,BIT_SET_27},
	{BIT_SET_2X,ZHD_BLOC2},{BIT_SET_2X,BIT_SET_27},
	{BIT_SET_2X,ZHD_BLOC2},{BIT_SET_2X,BIT_SET_27},
	{BIT_SET_2X,ZHD_BLOC2},{BIT_SET_2X,BIT_SET_27},
	{BIT_SET_2X,ZHD_BLOC2},{BIT_SET_2X,BIT_SET_27},
	{BIT_SET_2X,ZHD_BLOC2},{BIT_SET_2X,BIT_SET_27},
	{BIT_SET_2X,BIT_SET_27},
};